#include <iostream>

class Dog
{
public:
    void bark()
    {
        std::cout << "Dog Barking" << std::endl;
    }
};

class Cat
{
public:
    void sleep()
    {
        std::cout << "Cat Sleep" << std::endl;
    }
};

template <typename T>
class Base
{
public:
    T pet;
    void makeSleep()
    {
        pet.sleep();
    }

    void makeBark()
    {
        pet.bark();
    }
};

int main(int argc, char const *argv[])
{
    
    Base<Dog> dog{};
    dog.makeBark();
    // dog.makeSleep(); // 如果不调用这条语句的话，就不会报错，因为模板类也不会知道这个成员没有这个函数可以调用
    return 0;
}
